﻿//////////////////////////////////////////////////////////////////////////////
//
// Copyright © 1998-2024 Glodon Company Limited.
//
// Licensed under the MIT License
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the “Software”),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//////////////////////////////////////////////////////////////////////////////
#include "ClipBoardShapeHandleBehavior.h"
#include "ICalculator.h"
#include "IParameterDefinitionLibrary.h"
#include "IModelView.h"
#include "IElementShapeHandle.h"
#include "IGenericElement.h"
#include "IGraphicsPoint.h"
#include "Vector3dUtils.h"
#include "CommandParameters.h"
#include "IParameterBinding.h"
#include "DbObjectUtils.h"
#include "IGraphicsElementShape.h"
#include "EnableCompileWarning_The_LAST_IncludeInCpp.h"

using namespace gcmp;
using namespace std;

DBOBJECT_DATA_DEFINE(ClipBoardShapeHandleBehavior)
{
}

gcmp::ClipBoardShapeHandleBehavior::ClipBoardShapeHandleBehavior(IDocument* pDoc, const Vector3d& inserPt)
    :m_Document(pDoc)
    ,m_InserPt(inserPt)
{

}

gcmp::ClipBoardShapeHandleBehavior::~ClipBoardShapeHandleBehavior()
{
}

IElementShapeHandle * gcmp::ClipBoardShapeHandleBehavior::GetElementShapeHandle() const
{
    IElementShapeHandle* pElement = dynamic_cast<IElementShapeHandle*>(m_Document->GetElement(GetElementShapeHandleId()));
    return pElement;
}

void gcmp::ClipBoardShapeHandleBehavior::GetCalculators(ICalculatorCollection* calculators) const
{
    //TODO：
}

gcmp::OwnerPtr<gcmp::IGraphicsElementShape> gcmp::ClipBoardShapeHandleBehavior::CreateGrahicsElementShapeInModelView(const gcmp::IModelView * pModelView) const
{
    const std::wstring& viewType = pModelView->GetUserDataId();

    IElementShapeHandle* pElementShapeHandle = GetElementShapeHandle();
    DBG_WARN_AND_RETURN_NULLPTR_UNLESS(pElementShapeHandle != nullptr, L"pElementShapeHandle指针无效",L"GDMPLab",L"2024-03-30");

    OwnerPtr<IGraphicsElementShape> opReturnGrep = gcmp::IGraphicsElementShape::Create(GraphicsRenderLayer::TransientObject);
    OwnerPtr<IGraphicsPoint> opGPoint = IGraphicsPoint::Create();
    opGPoint->SetPoint(m_InserPt);
    opReturnGrep->AddChild(TransferOwnership(opGPoint));

    return TransferOwnership(opReturnGrep);
}

bool gcmp::ClipBoardShapeHandleBehavior::GetHandleCommandString(const IObject* commandEnvironment, std::wstring & commandStr, gcmp::CommandParameters& cmdParams) const
{
    //TODO：
    return true;
}

void gcmp::ClipBoardShapeHandleBehavior::UpdatePositionIndexInMasterElement()
{
    IElementShapeHandle* pElementShapeHandle = GetElementShapeHandle();
    DBG_WARN_AND_RETURN_VOID_UNLESS(pElementShapeHandle != nullptr, L"pElementShapeHandle指针无效",L"GDMPLab",L"2024-03-30");

    //TODO：
}
